/**
 * 日志中间件,自定义
 * zustand 的中间件是用于在状态管理过程中添加额外逻辑的工具。
 * 它们可以用于日志记录、性能监控、数据持久化、异步操作等
 * 
 * 中间件函数接收一个配置函数作为参数，该函数返回一个包含 set、get 和 api 的对象。高高阶函数，固定写法
 * 参数解释：
config (外层函数参数)
类型：函数 (set, get, api) => StoreApi
作用：原始创建 store 的配置函数，由用户传入。中间件需要包装这个函数。
set (内层函数参数)

类型：函数 (partialState) => void
作用：原始的状态更新函数，用于修改 store 的状态。
get (内层函数参数)

类型：函数 () => State
作用：获取当前 store 的状态值。
api (内层函数参数)

类型：对象 StoreApi
作用：包含 store 的完整 API（如 setState, getState, subscribe, destroy 等方法）
**/

export const logger = (config) => (set, get, api) => (config((...args) => {
    console.log(api)
    console.log('before', get())
    set(...args)
    console.log('next state', get())
}, get, api))

